void
_gtk_icon_helper_clear (GtkIconHelper *self)
{
- g_clear_object (&self->priv->window);
g_clear_pointer (&self->priv->rendered_surface, cairo_surface_destroy);
gtk_image_definition_unref (self->priv->def);
}
}
-void
- _gtk_icon_helper_set_window (GtkIconHelper *self,
- GdkWindow *window)
-{
- if (window)
- g_object_ref (window);
- g_clear_object (&self->priv->window);
- self->priv->window = window;
-
-}
-
static void
gtk_icon_helper_finalize (GObject *object)
{
cairo_destroy (cr);
}
-static gint
-get_scale_factor (GtkIconHelper *self,
- GtkStyleContext *context)
-{
- GdkScreen *screen;
-
- if (self->priv->window)
- return gdk_window_get_scale_factor (self->priv->window);
-
- screen = gtk_style_context_get_screen (context);
-
- /* else fall back to something that is more likely to be right than
- * just returning 1:
- */
- return gdk_screen_get_monitor_scale_factor (screen, 0);
-}
-
static gboolean
check_invalidate_surface (GtkIconHelper *self,
GtkStyleContext *context)
{
int scale;
- scale = get_scale_factor (self, context);
+ scale = gtk_widget_get_scale_factor (self->priv->owner);
if ((self->priv->rendered_surface != NULL) &&
(self->priv->last_surface_scale == scale))
else
pixbuf = g_object_ref (orig_pixbuf);
- surface = gdk_cairo_surface_create_from_pixbuf (pixbuf, scale, self->priv->window);
+ surface = gdk_cairo_surface_create_from_pixbuf (pixbuf, scale, gtk_widget_get_window (self->priv->owner));
icon_effect = _gtk_css_icon_effect_value_get (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_ICON_EFFECT));
gtk_css_icon_effect_apply (icon_effect, surface);
g_object_unref (pixbuf);
scale);
surface = gdk_cairo_surface_create_from_pixbuf (pixbuf,
scale,
- self->priv->window);
+ gtk_widget_get_window (self->priv->owner));
g_object_unref (pixbuf);
return surface;
{
GtkCssIconEffect icon_effect;
- surface = gdk_cairo_surface_create_from_pixbuf (destination, scale, self->priv->window);
+ surface = gdk_cairo_surface_create_from_pixbuf (destination, scale, gtk_widget_get_window (self->priv->owner));
icon_effect = _gtk_css_icon_effect_value_get (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_ICON_EFFECT));
gtk_css_icon_effect_apply (icon_effect, surface);
}
else
{
- surface = gdk_cairo_surface_create_from_pixbuf (destination, scale, self->priv->window);
+ surface = gdk_cairo_surface_create_from_pixbuf (destination, scale, gtk_widget_get_window (self->priv->owner));
}
g_object_unref (destination);
if (!check_invalidate_surface (self, context))
return;
- scale = get_scale_factor (self, context);
+ scale = gtk_widget_get_scale_factor (self->priv->owner);
self->priv->rendered_surface = gtk_icon_helper_load_surface (self, context, scale);
}
case GTK_IMAGE_PIXBUF:
get_pixbuf_size (self,
- get_scale_factor (self, context),
+ gtk_widget_get_scale_factor (self->priv->owner),
gtk_image_definition_get_pixbuf (self->priv->def),
gtk_image_definition_get_scale (self->priv->def),
&width, &height, &scale);
static void gtk_image_size_allocate (GtkWidget *widget,
GtkAllocation*allocation);
static void gtk_image_unmap (GtkWidget *widget);
-static void gtk_image_realize (GtkWidget *widget);
static void gtk_image_unrealize (GtkWidget *widget);
static void gtk_image_get_preferred_width (GtkWidget *widget,
gint *minimum,
widget_class->get_preferred_height_and_baseline_for_width = gtk_image_get_preferred_height_and_baseline_for_width;
widget_class->size_allocate = gtk_image_size_allocate;
widget_class->unmap = gtk_image_unmap;
- widget_class->realize = gtk_image_realize;
widget_class->unrealize = gtk_image_unrealize;
widget_class->style_updated = gtk_image_style_updated;
widget_class->screen_changed = gtk_image_screen_changed;
GTK_WIDGET_CLASS (gtk_image_parent_class)->unmap (widget);
}
-static void
-gtk_image_realize (GtkWidget *widget)
-{
- GtkImage *image = GTK_IMAGE (widget);
- GtkImagePrivate *priv = image->priv;
-
- GTK_WIDGET_CLASS (gtk_image_parent_class)->realize (widget);
-
- _gtk_icon_helper_set_window (priv->icon_helper,
- gtk_widget_get_window (widget));
-}
-
static void
gtk_image_unrealize (GtkWidget *widget)
{
- GtkImage *image = GTK_IMAGE (widget);
- GtkImagePrivate *priv = image->priv;
-
- _gtk_icon_helper_set_window (priv->icon_helper, NULL);
gtk_image_reset_anim_iter (GTK_IMAGE (widget));
GTK_WIDGET_CLASS (gtk_image_parent_class)->unrealize (widget);